package cn.antblog.code;

import cn.antblog.jdk8.bean.Student;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * @author ：YangJingyi
 * @date ：Created in 2022/2/14 11:19
 * @description：TODO
 * @modified By：
 * @version: 1.0
 */
public class Arr2 {

    public static void main(String[] args) {
//        //二维数组不是规则的矩阵
//        int [][] intA ={{1,2},{2,3,4},{3,4,5,6}};
//        System.out.println(intA);
//
//        //声明一一个二维数组，用于存储3个一维数组，每一个一维数据存多少个数组，不知道 ，null
//        int [][]intB=new int[3][];
//        intB[0]=new int[3];  //3
//        intB[1]=new int[]{1,2,3,4};  //3
//        intB[2]=new int[2];  //2
//        System.out.println(intB);
//
//        //声明一个二维数组，同时创建出一维数组，每个一维数组的长度均相同
//        //存储三个一维数组，每个一维数组的长度为4
//        int []intC[]=new int[3][4];
//        System.out.println(intC);


        //二维数组
//        int [] [] intA={{1,2},{2,3,4},{3,4,5,6}};
//        //(1)普通for循环
//        for(int i=0;i<intA.length;i++){ //0,1,2
//            for(int j=0;j<intA[i].length;j++){ //每一个一维数组的长度
//                System.out.print(intA[i][j]+"\t");
//            }
//            System.out.println();
//        }
        new Arr2().transformData();

    }

    public String[][] transformData() {
        List<Student> list = new ArrayList<>();
        Student student1 = new Student("小红", 18);
        Student student2 = new Student("小黑", 20);
        list.add(student1);
        list.add(student2);

        int dataSize = list.size();
        Field[] fields = list.get(0).getClass().getDeclaredFields();
        List<String> columnNames = this.getBeanProperty(fields);
        String[][] datas = new String[dataSize][];
        for (int i = 0; i < dataSize; i++) {
            datas[i] = new String[fields.length];
            for (int j = 0; j < fields.length; j++) {
                try {
                    // 赋值
                    datas[i][j] = BeanUtils.getProperty(list.get(i), columnNames.get(j));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return datas;
    }

    // 获取实体类的字段名称数组
    public List<String> getBeanProperty(Field[] fields) {
        List<String> columnNames = new ArrayList<>();
        for (Field field : fields) {
            String[] strings = field.toString().split("\\.");
            String columnName = strings[strings.length - 1];
            columnNames.add(columnName);
        }
        return columnNames;
    }
}
